﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_14_Registrarse_en_el_Sistema;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;
using System.Text.RegularExpressions;

namespace vudu.Presentacion.Presentador.VU_14_Registrarse_en_el_Sistema
{
    public class PresentadorRegistroSistema
    {
        private IContratoRegistroSistema _vista;
        private EnlaceLogico _fachada;
        #region Variables y constantes;

        //List<Escuela> miEsc = new List<Escuela>();
        private int _longMinCorreo = 3;
        private int _longMaxCorreo = 38;
        private int _longMinCedula = 7;
        private int _longMaxCedula = 8;
        private int _longMinPass = 6;
        private int _longMaxPass = 20;
        private int num = 0;
        int _opcion = 0;

        #endregion

        public PresentadorRegistroSistema(IContratoRegistroSistema vista)
        {
            _vista = vista;
            _fachada = new EnlaceLogico();
        }

        public void VaciarCampos()
        {
            _vista.cedula.Text = _vista.usuario.Text = _vista.password.Text = "";
            _vista.listaUniversidad.DataSource = null;
        }

        public bool ValidarCampos()
        {
            bool val1 = true;
            bool val2 = true;
            bool val3 = true;
            bool val4 = true;
            val1 = this.ValidarCedula(_vista.cedula.Text);
            val2 = this.ValidarCorreo(_vista.usuario.Text);
            val3 = this.ValidarPassword(_vista.password.Text);
            if (_vista.cedula.Text == "")  /// Valida si el campo de la cedula es vacio
            {
                _vista.errorObligatorio1.Text = "Debe introducir su cedula";
                _vista.errorObligatorio1.CssClass = "mensaje";
                _vista.errorObligatorio1.Visible = true;
                val4 = false;
            }
            if (_vista.usuario.Text == "")    /// Valida si el campo del mail es vacio
            {
                _vista.errorObligatorio2.Text = "Debe introducir el usuario";
                _vista.errorObligatorio2.CssClass = "mensaje";
                _vista.errorObligatorio2.Visible = true;
                val4 = false;
            }
            if (_vista.password.Text == "")    /// Valida si el campo del password es vacio
            {
                _vista.errorObligatorio3.Text = "Debe introducir el password";
                _vista.errorObligatorio3.CssClass = "mensaje";
                _vista.errorObligatorio3.Visible = true;
                val4 = false;
            }
            if ((val1 == true) && (val2 == true) && (val3 == true) && (val4 == true))
                return true;
            else
                return false;
        }

        public bool ValidarCamposUniEscuela()
        {
            //bool val1 = true;
            bool val2 = true;
            bool val3 = true;
            bool val4 = true;
            //val1 = this.ValidarCedula(cedulaTextBox.Text);
            val2 = this.ValidarCorreo(_vista.usuario.Text);
            val3 = this.ValidarPassword(_vista.password.Text);

            if (_vista.usuario.Text == "")    /// Valida si el campo del mail es vacio
            {
                _vista.errorObligatorio2.Text = "Debe introducir el usuario";
                _vista.errorObligatorio2.CssClass = "mensaje";
                _vista.errorObligatorio2.Visible = true;
                val4 = false;
            }
            if (_vista.password.Text == "")    /// Valida si el campo del password es vacio
            {
                _vista.errorObligatorio3.Text = "Debe introducir el password";
                _vista.errorObligatorio3.CssClass = "mensaje";
                _vista.errorObligatorio3.Visible = true;
                val4 = false;
            }
            if ((val2 == true) && (val3 == true) && (val4 == true))
                return true;
            else
                return false;
        }
        public bool ValidarCedula(string ci)
        {
            bool esValido = false;
            esValido = int.TryParse(ci, out num);
            if (!esValido)  /// solo numeros
            {
                _vista.errorObligatorio1.Text = "Solo numeros";
                _vista.errorObligatorio1.CssClass = "mensaje";
                _vista.errorObligatorio1.Visible = true;
                return false;
            }
            else if ((ci.Length < _longMinCedula) || (ci.Length > _longMaxCedula))  /// mayor que 7 y menor que 8
            {
                _vista.errorObligatorio1.Text = "Cedula no valida";
                _vista.errorObligatorio1.CssClass = "mensaje";
                _vista.errorObligatorio1.Visible = true;
                return false;
            }
            else
            {
                return true;
            }
        }

        public bool ValidarCorreo(string correo)
        {
            Regex regex = new Regex(@"\W");
            Regex rege = new Regex(@"\s");


            if ((rege.IsMatch(correo)) || (regex.IsMatch(correo)))  /// valida que no tenga caracteres especiales
            {
                _vista.errorObligatorio2.Text = "Correo invalido";
                _vista.errorObligatorio2.CssClass = "mensaje";
                _vista.errorObligatorio2.Visible = true;
                return false;
            }
            else if ((correo.Length < _longMinCorreo) || (correo.Length > _longMaxCorreo))  /// mayor que 3 y menor que 38
            {
                _vista.errorObligatorio2.Text = "Longitud del correo invalida";
                _vista.errorObligatorio2.CssClass = "mensaje";
                _vista.errorObligatorio2.Visible = true;
                return false;
            }
            else
            {
                return true;
            }
        }

        public bool ValidarPassword(string pass)
        {
            if ((pass.Length < _longMinPass) || (pass.Length > _longMaxPass))
            {
                _vista.errorObligatorio3.Text = "6 a 20 caracteres";
                _vista.errorObligatorio3.CssClass = "mensaje";
                _vista.errorObligatorio3.Visible = true;
                return false;
            }
            else
            {
                return true;
            }
        }

        public void InicioPantalla()
        {
            _vista.mensajePrincipal.Text = "Registro Sistema";
            _vista.asterisco1.Visible = false;
            _vista.mensajeNombreUsuario.Visible = false;
            _vista.listaUniversidad.Visible = false;
            _vista.cedula.Visible = false;
            _vista.asterisco2.Visible = false;
            _vista.asterisco2Informacion.Visible = false;
            _vista.usuario.Visible = false;
            _vista.asterisco3.Visible = false;
            _vista.asterisco3Informacion.Visible = false;
            _vista.password.Visible = false;
            _vista.correoUsuario.Visible = false;

            _vista.errorObligatorio1.Visible = false;
            _vista.errorObligatorio1.Text = "";
            _vista.errorObligatorio2.Visible = false;
            _vista.errorObligatorio2.Text = "";
            _vista.errorObligatorio3.Visible = false;
            _vista.errorObligatorio3.Text = "";

        }

        public void SeleccionUsuarioRol()
        {
            String opcion = _vista.opcion.SelectedValue;
            _vista.listaUniversidad.Items.Clear();
            if (opcion.Equals("0"))
            {
                _vista.mensajePrincipal.Text = "Registro Sistema";
               
            }
            if (opcion.Equals("1"))
            {
                _vista.asterisco1.Visible = true;
                _vista.mensajeNombreUsuario.Visible = true;
                _vista.listaUniversidad.Visible = true;
                _vista.asterisco2.Visible = true;
                _vista.asterisco2Informacion.Visible = true;
                _vista.usuario.Visible = true;
                _vista.asterisco3.Visible = true;
                _vista.asterisco3Informacion.Visible = true;
                _vista.password.Visible = true;
                _vista.cedula.Visible = false;
                _vista.correoUsuario.Visible = true;
                _vista.correoUsuario.Text = "@univ.vudu.com";
                _vista.mensajePrincipal.Text = "Registro Universidad";
                this.LlenarListaUniversidad();
            }
            if (opcion.Equals("2"))
            {
                _vista.asterisco1.Visible = true;
                _vista.mensajeNombreUsuario.Visible = true;
                _vista.listaUniversidad.Visible = true;
                _vista.asterisco2.Visible = true;
                _vista.asterisco2Informacion.Visible = true;
                _vista.usuario.Visible = true;
                _vista.asterisco3.Visible = true;
                _vista.asterisco3Informacion.Visible = true;
                _vista.password.Visible = true;
                _vista.cedula.Visible = false;
                _vista.correoUsuario.Visible = true;
                _vista.correoUsuario.Text = "@esc.vudu.com";
                _vista.mensajePrincipal.Text = "Registro Escuela";
                this.LlenarListaEscuela();
            }
            if (opcion.Equals("3"))
            {
                _vista.asterisco1.Visible = true;
                _vista.mensajeNombreUsuario.Visible = true;
                _vista.mensajeNombreUsuario.Text = "Cedula de Identidad";
                _vista.listaUniversidad.Visible = false;
                _vista.asterisco2.Visible = true;
                _vista.asterisco2Informacion.Visible = true;
                _vista.usuario.Visible = true;
                _vista.asterisco3.Visible = true;
                _vista.asterisco3Informacion.Visible = true;
                _vista.password.Visible = true;
                _vista.cedula.Visible = true;
                _vista.correoUsuario.Visible = true;
                _vista.correoUsuario.Text = "@est.vudu.com";
                _vista.mensajePrincipal.Text = "Registro Estudiante";
               
            }
            if (opcion.Equals("4"))
            {
                _vista.asterisco1.Visible = true;
                _vista.mensajeNombreUsuario.Visible = true;
                _vista.mensajeNombreUsuario.Text = "Cedula de Identidad";
                _vista.listaUniversidad.Visible = false;
                _vista.asterisco2.Visible = true;
                _vista.asterisco2Informacion.Visible = true;
                _vista.usuario.Visible = true;
                _vista.asterisco3.Visible = true;
                _vista.asterisco3Informacion.Visible = true;
                _vista.password.Visible = true;
                _vista.cedula.Visible = true;
                _vista.correoUsuario.Visible = true;
                _vista.correoUsuario.Text = "@prof.vudu.com";
                _vista.mensajePrincipal.Text = "Registro Profesor";
                
            }
        }

        public void LlenarListaUniversidad()
        {
            EnlaceLogico miEnlace = new EnlaceLogico();
            List<Universidad> unis = miEnlace.ConsultarUniversidades();

            for (int i = 0; i < unis.Count; i++) // Loop through List with for
            {
               
                //ListItem oItem = new ListItem("Juan Valdes", "1");
               _vista.listaUniversidad.Items.Add(new ListItem (unis[i].Nombre.ToString(),unis[i].IdUniv.ToString()));
               

                
            }
      
        }
        public void LlenarListaEscuela()
        {
            EnlaceLogico miEnlace = new EnlaceLogico();
            List<Escuela> unis = miEnlace.ConsultarEscuelasCombo();

            for (int i = 0; i < unis.Count; i++) // Loop through List with for
            {

                //ListItem oItem = new ListItem("Juan Valdes", "1");
                _vista.listaUniversidad.Items.Add(new ListItem(unis[i].NombreEscuela.ToString(), unis[i].IdEscuela.ToString()));



            }

        }

        public void RegistrarUsuarioEnSistema()
        {
            String opcion = _vista.opcion.SelectedValue;
            int usuario = int.Parse(opcion);
            if ((opcion.Equals("1")) && (this.ValidarCamposUniEscuela() == true))
            {

                //Rol universidad = new Universidad();
                //this.realizarRegistro(universidad, "Universidad");

                this.realizarRegistro("Universidad",usuario);
                this.VaciarCampos();
                

            }
            if ((opcion.Equals("2")) && (this.ValidarCamposUniEscuela() == true))
            {

                //Rol escuela = new Escuela();
                //this.realizarRegistro(escuela, "Escuela");
                this.realizarRegistro("Escuela", usuario);
                this.VaciarCampos();
               

            }
            if ((opcion.Equals("3")) && (this.ValidarCampos() == true))
            {

                //Rol estudiante = new Estudiante();
                this.RealizarRegistro2("Estudiante",usuario);
                this.VaciarCampos();

            }
            if ((opcion.Equals("4")) && (this.ValidarCampos() == true))
            {

                //Rol profesor = new Profesor();
                //this.RealizarRegistro2(profesor, "Profesor");
                this.RealizarRegistro2("Profesor", usuario);
                this.VaciarCampos();

            }
        }


        public void realizarRegistro(string usuario,int rol)
        {


            string correo; string clave;

            _opcion = int.Parse(_vista.listaUniversidad.SelectedValue);

            correo = _vista.usuario.Text + _vista.correoUsuario.Text;
            clave = _vista.password.Text;


            if ( _fachada.verificarCorreoUsuarioRol(correo,rol) == true)
            {
                _vista.avisotransaccion.Text = "Operación Fallida: El correo ya es utilizado";
                _vista.avisotransaccion.CssClass = "transaccionFallida";
                _vista.avisotransaccion.Visible = true;
            }
            else
            {

                _fachada.RegistrarRolenSistema(correo, clave, rol, _opcion);
                _vista.avisotransaccion.Text = "La " + usuario + " se registro con éxito";
                _vista.avisotransaccion.CssClass = "transaccionExitosa";
                _vista.avisotransaccion.Visible = true;


            }


        }

        public void RealizarRegistro2(string usuario, int rol)
        {
            bool val1 = true;
            bool val2 = true;
            bool val3 = true;
            string correo; string clave;
            int cedula = int.Parse(_vista.cedula.Text.ToString());
               

            correo = _vista.usuario.Text + _vista.correoUsuario.Text;
            clave = _vista.password.Text;

            if (_fachada.verificarCedulaUsuarioRol(cedula,rol) == false)
            {
                _vista.avisotransaccion.Text = "Operación Fallida: El " + usuario + " no existe";
                _vista.avisotransaccion.CssClass = "transaccionFallida";
                _vista.avisotransaccion.Visible = true;
                val1 = false;
            }
            if (_fachada.verificarCorreoUsuarioRol(correo,rol) == true)
            {
                _vista.avisotransaccion.Text = "Operación Fallida: El correo ya es utilizado";
                _vista.avisotransaccion.CssClass = "transaccionFallida";
                _vista.avisotransaccion.Visible = true;
                val2 = false;
            }
            if (_fachada.verificarUsuarioRol(cedula,rol) == true)
            {
                _vista.avisotransaccion.Text = "Operación Fallida: El " + usuario + " ya esta registrado";
                _vista.avisotransaccion.CssClass = "transaccionFallida";
                _vista.avisotransaccion.Visible = true;
                val3 = false;
            }
            if ((val1 == true) && (val2 == true) && (val3 == true))
            {
                
                _fachada.RegistrarRolenSistema(correo, clave, rol, cedula);
                _vista.avisotransaccion.Text = "El " + usuario + " se registro con éxito";
                _vista.avisotransaccion.CssClass = "transaccionExitosa";
                _vista.avisotransaccion.Visible = true;
            }


        }

    }
}